package com.suntianci.stock.service;

import com.suntianci.stock.pojo.domain.UserInfo4SelectById;
import com.suntianci.stock.pojo.domain.UserInfoDomain;
import com.suntianci.stock.pojo.entity.SysUser;
import com.suntianci.stock.vo.req.*;
import com.suntianci.stock.vo.resp.LoginRespVo;
import com.suntianci.stock.vo.resp.PageResult;
import com.suntianci.stock.vo.resp.R;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @ClassName UserService
 * @Author 孙天赐
 * @Date 2024/12/24 19:42
 * @Description TODO: 用户服务接口
 */
public interface UserService {
    /**
     * TODO: 根据用户名查询用户信息
     * @param userName
     * @return
     */
    SysUser findUserInfoByUserName(String userName);

    /**
     * TODO: 用户登录
     * @param loginReqVo
     * @return
     */
    R<LoginRespVo> login(LoginReqVo loginReqVo);

    /**
     * TODO: 生成图片验证码功能
     * @return
     */
    R<Map> getCaptchaCode();

    /**
     * TODO: 分页查询全部用户信息
     * @param usersInfoReqVo
     * @return
     */
    R<PageResult<UserInfoDomain>> getUsersInfoByPage(UsersInfoReqVo usersInfoReqVo);

    /**
     * TODO: 添加用户信息
     * @param addUserReqVo
     * @return
     */
    R<Void> addUser(AddUserReqVo addUserReqVo, HttpServletRequest httpServletRequest);

    /**
     * TODO: 获取用户具有的角色信息，以及所有角色信息
     * @param userId
     * @return
     */
    R<Map<String, List>> getUserRoleAndAllRoles(String userId);

    /**
     * TODO: 更新用户角色信息
     * @param updateUserRolesReqVo
     * @return
     */
    R<Void> updateUserRoles(UpdateUserRolesReqVo updateUserRolesReqVo, HttpServletRequest httpServletRequest);

    /**
     * TODO: 批量删除用户信息
     * @param userIds
     * @return
     */
    R<Void> batchDeleteUser(List<Long> userIds);

    /**
     * TODO: 根据用户id查询用户信息
     * @param userId
     * @return
     */
    R<UserInfo4SelectById> getUserInfoById(String userId);

    /**
     * TODO: 根据id更新用户基本信息
     * @param updateUserReqVo
     * @return
     */
    R<Void> updateUserById(UpdateUserReqVo updateUserReqVo, HttpServletRequest httpServletRequest);

}
